import { NextRequest, NextResponse } from 'next/server';
import { getServerSession } from 'next-auth/next';
import { authOptions } from '@/app/api/auth/[...nextauth]/route';
import { prisma, dbOperation } from '@/lib/db';

// 获取用户信息
export async function GET(request: NextRequest) {
  try {
    // 检查用户是否已认证
    const session = await getServerSession(authOptions);

    if (!session?.user) {
      return NextResponse.json(
        { success: false, message: '未授权访问' },
        { status: 401 }
      );
    }

    // 获取查询参数
    const searchParams = request.nextUrl.searchParams;
    const userId = searchParams.get('id');
    
    // 如果提供了用户ID，获取特定用户信息
    if (userId) {
      // 只允许获取自己或与自己相关的项目成员的信息
      if (userId !== session.user.id) {
        // 检查请求者是否与目标用户有关联（例如，同一个项目中）
        const sharedProjects = await prisma.projectUser.count({
          where: {
            userId: session.user.id,
            project: {
              users: {
                some: {
                  userId,
                },
              },
            },
          },
        });

        if (sharedProjects === 0) {
          return NextResponse.json(
            { success: false, message: '无权访问此用户信息' },
            { status: 403 }
          );
        }
      }

      // 获取用户信息，排除敏感字段
      const result = await dbOperation(async () => {
        return prisma.user.findUnique({
          where: { id: userId },
          select: {
            id: true,
            name: true,
            email: true,
            image: true,
            createdAt: true,
            updatedAt: true,
            // 排除密码和其他敏感信息
          },
        });
      });

      if (!result.success) {
        return NextResponse.json(
          { success: false, message: '获取用户信息失败', error: result.error },
          { status: 500 }
        );
      }

      if (!result.data) {
        return NextResponse.json(
          { success: false, message: '用户不存在' },
          { status: 404 }
        );
      }

      return NextResponse.json({ success: true, data: result.data });
    }
    
    // 如果没有提供用户ID，返回当前用户的信息
    const currentUser = await dbOperation(async () => {
      return prisma.user.findUnique({
        where: { id: session.user.id },
        select: {
          id: true,
          name: true,
          email: true,
          image: true,
          createdAt: true,
          updatedAt: true,
          // 包含项目数量和任务数量的统计信息
          _count: {
            select: {
              projects: true,
              tasks: true,
            },
          },
        },
      });
    });

    if (!currentUser.success || !currentUser.data) {
      return NextResponse.json(
        { success: false, message: '获取用户信息失败', error: currentUser.error },
        { status: 500 }
      );
    }

    return NextResponse.json({ success: true, data: currentUser.data });
  } catch (error: any) {
    console.error('获取用户信息失败:', error);
    return NextResponse.json(
      { success: false, message: '获取用户信息失败', error: error.message },
      { status: 500 }
    );
  }
}

// 更新用户信息
export async function PUT(request: NextRequest) {
  try {
    // 检查用户是否已认证
    const session = await getServerSession(authOptions);

    if (!session?.user) {
      return NextResponse.json(
        { success: false, message: '未授权访问' },
        { status: 401 }
      );
    }

    // 解析请求体
    const body = await request.json();
    
    // 只允许更新特定字段
    const allowedFields = ['name', 'image'];
    const updateData: Record<string, any> = {};
    
    Object.keys(body).forEach(key => {
      if (allowedFields.includes(key)) {
        updateData[key] = body[key];
      }
    });
    
    // 如果没有有效的字段需要更新，返回错误
    if (Object.keys(updateData).length === 0) {
      return NextResponse.json(
        { success: false, message: '没有提供有效的更新字段' },
        { status: 400 }
      );
    }
    
    // 更新用户信息
    const result = await dbOperation(async () => {
      return prisma.user.update({
        where: { id: session.user.id },
        data: updateData,
        select: {
          id: true,
          name: true,
          email: true,
          image: true,
          updatedAt: true,
        },
      });
    });

    if (!result.success) {
      return NextResponse.json(
        { success: false, message: '更新用户信息失败', error: result.error },
        { status: 500 }
      );
    }

    return NextResponse.json({ 
      success: true, 
      message: '用户信息更新成功',
      data: result.data
    });
  } catch (error: any) {
    console.error('更新用户信息失败:', error);
    return NextResponse.json(
      { success: false, message: '更新用户信息失败', error: error.message },
      { status: 500 }
    );
  }
} 